<?php
/**
 * Vbot 消息处理器
 * @App	
 * @Group 
 * @Action VbotMessageHandler
 * @author lilei
 * @date 2018年11月15日
 *
 */

namespace app\common\service\vbot;

use app\common\library\CommonFun;
use app\common\model\wechat\WeChatVbotMessageModel;
use app\common\redis\SpiderArticleRedis;
use Hanson\Vbot\Contact\Friends;
use Hanson\Vbot\Contact\Groups;
use Hanson\Vbot\Contact\Members;
use Hanson\Vbot\Message\Emoticon;
use Hanson\Vbot\Message\Text;
use Illuminate\Support\Collection;

class VbotMessageHandler {
	/**
	 * System 系统消息
	 * @var string
	 */
	const MsgFromTypeSystem='System';
	
	/**
	 * Self 自己发送的消息
	 * @var string
	 */
	const MsgFromTypeSelf='Self';
	
	/**
	 * Group 群组消息
	 * @var string
	 */
	const MsgFromTypeGroup ='Group';
	
	/**
	 * Friend 联系人消息
	 * @var string
	 */
	const MsgFromTypeFriend ='Friend';
	
	/**
	 * Official 公众号消息
	 * @var string
	 */
	const MsgFromTypeOfficial='Official';
	
	/**
	 * Special 特殊账号消息
	 * @var string
	 */
	const MsgFromTypeSpecial='Special';
	
	/**
	 * Unknown 未知消息
	 * @var string
	 */
	const MsgFromTypeUnknown='Unknown';
	
	/**
	 * 文本
	 * @var string
	 */
	const MsgTypeText = 'text';
	
	/**
	 * 语音
	 * @var string
	 */
	const MsgTypeVoice = 'voice';
	
	/**
	 * 图片
	 * @var string
	 */
	const MsgTypeImage = 'image';
	
	/**
	 * 视频
	 * @var string
	 */
	const MsgTypeVideo = 'video';
	
	/**
	 * 表情
	 * @var string
	 */
	const MsgTypeEmoticon = 'emoticon';
	
	/**
	 * 文件
	 * @var string
	 */
	const MsgTypeFile = 'file';
	
	/**
	 * 地理位置
	 * @var string
	 */
	const MsgTypeLocation = 'location';
	
	/**
	 * 撤回
	 * @var string
	 */
	const MsgTypeRecall = 'recall';
	
	/**
	 * 名片
	 * @var string
	 */
	const MsgTypeCard = 'card';
	
	/**
	 * 红包
	 * @var string
	 */
	const MsgTypeRedPacket = 'red_packet';
	
	/**
	 * 好友请求
	 * @var string
	 */
	const MsgTypeRequestFriend = 'request_friend';
	
	/**
	 * 分享
	 * @var string
	 */
	const MsgTypeShare = 'share';
	
	/**
	 * 公众号
	 * @var string
	 */
	const MsgTypeOfficial = 'official';
	
	/**
	 * 点击
	 * @var string
	 */
	const MsgTypeTouch = 'touch';
	
	/**
	 * 转账
	 * @var string
	 */
	const MsgTypeTransfer = 'transfer';
	
	/**
	 * 新增好友
	 * @var string
	 */
	const MsgTypeNewFriend = 'new_friend';
	
	/**
	 * 群组变动
	 * @var string
	 */
	const MsgTypeGroupChange = 'group_change';
	
	/**
	 * 小程序
	 * @var string
	 */
	const MsgTypeMina = 'mina';
	
	/**
	 * 消息处理器
	 * @param Collection $message
	 */
	public static function messageHandler(Collection $message) {
		// 获取自己实例
		$myself = vbot('myself');
		// 当前 唯一的ID
		$myUID = $myself->uin;
		
		// 记录数据
		$modelWeChatVbotMessage = new WeChatVbotMessageModel();
		$modelWeChatVbotMessage->addMessage($message['type'], $myUID, $message['username'], $message['from'], $message['sender'], $message['content'], $message['message'], $message['fromType'], $message['raw']);
		
		
// 		vbot('console')->log( $message['type'], '自定义消息type' );
// 		vbot('console')->log( $message['fromType'], '自定义消息fromType' );
		
		//vbot('console')->log( $message, 'recMessage' );
		
		self::messageFromTypeRoute($message);
	}
	
	/**
	 * 消息发送者的类型
	 * @param Collection $message
	 */
	private static function messageFromTypeRoute( Collection $message ) {
		switch ( $message['fromType'] ) {
			case self::MsgFromTypeFriend:
				self::friendMsg($message);
				break;
			case self::MsgFromTypeGroup:
				self::groupMsg($message);
				break;
			case self::MsgFromTypeOfficial:
				self::officialMsg($message);
				break;
			case self::MsgFromTypeSelf:
				self::selfMsg($message);
				break;
			case self::MsgFromTypeSpecial:
				self::specialMsg($message);
				break;
			case self::MsgFromTypeSystem:
				self::systemMsg($message);
				break;
			case self::MsgFromTypeUnknown:
				self::unknownMsg($message);
				break;
		}
	}
	
	/**
	 * 好友消息处理
	 * @param Collection $message
	 */
	private static function friendMsg( Collection $message ) {
		// 好友实例
		$friends = vbot('friends');
	}
	
	/**
	 * 群消息处理
	 * @param Collection $message
	 */
	private static function groupMsg( Collection $message ) {
		// 群实例
		$groups = vbot('groups');
		// 群成员实例
		$members = vbot('members');
		
		
	}
	
	/**
	 * 公众号消息处理
	 * @param Collection $message
	 */
	private static function officialMsg( Collection $message ) {
		// 公众号实例
		$officials = vbot('officials');
		
		//vbot('console')->log( $message, 'recMessage' );
		
		// 存在Url
		if ( isset( $message['url'] ) ) {
			//vbot('console')->log( $message['url'], 'recMessage' );
			//获取所有url
			$url_list = [];
			if ( $message['url'] ) {
				$url_list[] = htmlspecialchars_decode(urldecode($message['url']));
			}
			if ( isset($message['articles']) ) {
				foreach ( $message['articles'] as $v ) {
					$url_list[] = htmlspecialchars_decode(urldecode($v['url']));
				}
			}
			// 插入采集库和采集队列
			if ( $url_list ) {
				$url_list = array_unique($url_list);
				// 采集相关模型
				$modelSpiderSource = new SpiderSourceModel();
				$modelSpiderUrl = new SpiderUrlModel();
				$modelSpiderDownLoad = new SpiderDownloadModel();
				foreach ( $url_list as $_url ) {
					$urlRes = $modelSpiderDownLoad->get_data_by_unique_key('url', $_url);
					if ( $urlRes ) {
						vbot('console')->log( 'Url重复', 'recMessage' );
						continue;
					}
					$insert = [
							'parent_id' => 0,
							'source_id' => 2,
							'model' => 'SpiderWxModel',
							'url' => $_url,
							'property' => CommonFun::json_encode2([]),
					];
					
					$add_res = $modelSpiderDownLoad->add_data($insert);
					if ( $add_res ) {
						vbot('console')->log( '成功插入DownLoad', 'recMessage' );
						// 添加成功 加入下载队列
						$spiderRedis = new SpiderArticleRedis();
						$spiderRedis->pushSpiderDownLoadQueue($add_res);
					}else {
						vbot('console')->log( '插入失败DownLoad', 'recMessage' );
						vbot('console')->log( $modelSpiderDownLoad->getError(), 'recMessage' );
						vbot('console')->log( $modelSpiderDownLoad->getLastSql(), 'recMessage' );
					}
				}
			}
		}
		
		
	}
	
	/**
	 * 自己发送消息处理
	 * @param Collection $message
	 */
	private static function selfMsg( Collection $message ) {
		// 获取自己实例
		$myself = vbot('myself');
	}
	
	/**
	 * 特殊账号消息
	 * @param Collection $message
	 */
	private static function specialMsg( Collection $message ) {
		// 特殊账号实例
		$specials = vbot('specials');
	}
	
	/**
	 * 系统消息
	 * @param Collection $message
	 */
	private static function systemMsg(Collection $message) {}
	
	/**
	 * 未知消息
	 * @param Collection $message
	 */
	private static function unknownMsg(Collection $message) {}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}